<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once APPPATH2 . 'libraries/MY_Front_Controller.php';
/**
 * 工具控制器
 * 
 * Enter description here ...
 * @author Administrator
 *
 */
class Tool extends MY_Front_Controller 
{

	/**
	 * 数据迁移
	 */
	public function migrate()
	{
		$data = array();
		//$this->load->view('index/index');
		$script_path = APPPATH2 . 'migrate/';
		
		$this->_create_table_database_version();
		//遍历某个目录，得到其下所有文件，如果不是数字开头还要放弃，必须是^\d+_.+$的模式。
    	$files = scandir($script_path);
        $temp_arr = array();
        foreach($files as $value){
            if ($value != '.' && $value != '..' && $value != '.svn' &&
                preg_match('#^\d+_.+$#', $value) )
                $temp_arr[intval($value)] =  $value;
        }
        if (!$temp_arr) {
            echo '没有需要迁移的数据';
            return;
        }
        ksort($temp_arr, SORT_NUMERIC );
        $sql = "select version from database_version";
        $query = $this->db->query($sql);
        $version = $query->row()->version;
        
        $boo = 0; //假定未对数据库做改变
        foreach ($temp_arr  as $key => $value) {
            if ($key > $version) {
                $boo =1;
                $file_name = $script_path  . $value ;
                echo '<br/>正在执行文件：'. $value . ' ...';
                $this->_include_function($file_name);//对数据库操作
                $this->_setVersion($key); //把版本号存入特别的版本表
                $version = $key;  
            }
        }
        echo '<br/><br/>=======================================================================';
        if ($boo)
            echo '<br/>建表全部结束OK';
        else
            echo '<br/>数据库表结构没有更新，您现在无需建表';
	}
	
	/**
	 * 创建版本记录表
	 * 
	 * 该操作虽然要求在每次迁移前检查，但是实际上只是为了最初自动生成。
	 * 
	 */
	public function _create_table_database_version()
	{
	    $table = 'database_version';
	    if ( ! $this->db->table_exists($table)) {
	        $this->load->dbforge();
	        $fields = array(
                'version' => array(
                    'type' => 'int',
                    'default' => 0,
                ),
            ); 
	        $this->dbforge->add_field($fields);
	        $this->dbforge->create_table($table); 
	        //现在，需要插入一条初始值。
	        $this->db->insert($table, array('version'=> 0));
	    }
	}
	
    /**
     * 往版本表中设置值
     */
    function _setVersion($version) {
        $this->db->update(
            'database_version', 
            array(
                'version' => $version,
            )
        );
    }
	
	/**
	 * 只为了执行某个文件，放在函数里限制作用域
	 */
	function _include_function($file_name)
	{
	    $this->load->dbforge();
	    $db = $this->db;
	    $dbforge = $this->dbforge;
	    include($file_name);
	    
	}
}

